package org.xx.armory.objectparser;

import static java.lang.String.format;

/**
 * 解析文件时出现的异常。
 *
 * @author Haart
 * @see org.xx.armory.objectparser.SourceFileParser
 */
public class ParserException
        extends RuntimeException {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     * 构造解析文件时出现的异常。
     *
     * @param message
     *         异常消息。
     */
    public ParserException(final String message) {
        super(message);
    }

    /**
     * 构造解析文件时出现的异常。
     *
     * @param lineInfo
     *         源文件中的位置信息。
     */
    public ParserException(final LineInfo lineInfo) {
        super(format("failed to parse file at %s(%d:%d).", lineInfo.getPath(), lineInfo.getRowNumber(), lineInfo.getColNumber()));
    }

    /**
     * 构造解析文件时出现的异常。
     *
     * @param lineInfo
     *         源文件中的位置信息。
     * @param cause
     *         引发此异常的原因。
     */
    public ParserException(
            final LineInfo lineInfo,
            Throwable cause
    ) {
        super(format("failed to parse file at %s(%d:%d).", lineInfo.getPath(), lineInfo.getRowNumber(), lineInfo.getColNumber()), cause);
    }

    /**
     * 构造解析文件时出现的异常。
     *
     * @param cause
     *         引发此异常的原因。
     */
    public ParserException(Throwable cause) {
        super("failed to parse file.", cause);
    }
}
